from django.core.files.storage import Storage
from fdfs_client.client import Fdfs_client


class FDSStorage(Storage):
    def __init__(self, client_cnf=None, base_url=None):
        if client_cnf is None:
            client_cnf = './utils/fdfs/client.conf'
        self.client_cnf = client_cnf
        if base_url is None:
            base_url = 'http://152.136.150.145:8888/'
        self.base_url = base_url
    '''fast_dfs 文件存储类'''
    def _open(self, name, mode='rb'):
        '''打开文件时使用'''
        pass
    def _save(self, name, content):
        '''保存文件时使用'''
        # name： 你选择上传文件的名字
        # content：包含你上传内容的File对象

        # 创建一个Fdfs_client对象
        client = Fdfs_client(self.client_cnf)
        # 上传文件到fast_dfs系统中
        res = client.upload_by_buffer(content.read())
        if res.get('Status') != 'Upload successed.':
            # 上传失败
            raise Exception('上传文件到fast dfs失败')

        #获取返回的文件ID
        filename = res.get('Remote file_id')
        return filename

    def exists(self, name):
        '''判断文件名是否有用'''
        return False

    def url(self, name):
        '''返回访问文件的名字'''
        return self.base_url+name